18114
1817
Viime aikoina suoritin osan JavaScript-koodistani Crockfordin JSLintin kautta, ja se antoi seuraavan virheen:
Ongelma rivin 1 merkissä 1: Puuttuu "use range" -käsky.
Tehdessäni joitain hakuja huomasin, että jotkut ihmiset lisäävät "käytä tiukasti"; JavaScript-koodiinsa. Kun lisäsin lauseen, virhe lakkasi näkymästä. Valitettavasti Google ei paljastanut suurta osaa tämän merkkijonon taustalla olevasta historiasta. Varmasti sillä on oltava jotain tekemistä sen kanssa, miten selain tulkitsee JavaScriptiä, mutta minulla ei ole aavistustakaan, mikä vaikutus sillä olisi.
Joten mikä on "käytä tiukkaa"; mitä se tarkoittaa, ja onko se edelleen merkityksellistä?
Reagoivatko jokin nykyisistä selaimista "käytä tiukasti" -toimintoa? merkkijono vai onko se tulevaa käyttöä varten? 
Tämä Javascriptin tiukasta tilasta kertova artikkeli saattaa kiinnostaa sinua: John Resig - ECMAScript 5 tiukka tila, JSON ja paljon muuta
Lainatakseni mielenkiintoisia osia:
Tiukka tila on uusi ominaisuus ECMAScript 5: ssä, jonka avulla voit sijoittaa ohjelman tai toiminnon "tiukkaan" toimintaympäristöön. Tämä tiukka konteksti estää tiettyjen toimien tekemisen ja tuo lisää poikkeuksia.
Ja:
Tiukka tila auttaa parilla tavalla:
Se saa kiinni tavallisista koodaavista bloopereista ja heittää poikkeuksia.
Se estää tai heittää virheitä, kun suoritetaan suhteellisen "vaarallisia" toimia (kuten pääsy globaaliin objektiin).
Se poistaa toiminnot, jotka ovat hämmentäviä tai huonosti harkittuja.
Huomaa myös, että voit käyttää "tiukkaa tilaa" koko tiedostoon ... Tai voit käyttää sitä vain tiettyyn toimintoon (lainaan edelleen John Resigin artikkelista):
// Tiukka koodi ...
(funktio () {
"käytä tiukasti";
// Määritä kirjastosi tiukasti ...
}) ();
// Ei-tiukka koodi ...
Mikä voi olla hyödyllistä, jos joudut sekoittamaan vanhan ja uuden koodin ;-)
Joten oletan, että se on vähän kuin "käytä tiukkaa", jota voit käyttää Perlissä (siis nimi?): Se auttaa sinua tekemään vähemmän virheitä havaitsemalla enemmän asioita, jotka voivat johtaa rikkoutumiseen.
Tiukkaa tilaa tukevat nyt kaikki suuret selaimet.
Alkuperäisissä ECMAScript-moduuleissa (tuonti- ja vientilausekkeilla) ja ES6-luokissa tiukka tila on aina käytössä eikä sitä voi poistaa käytöstä.
|
Se on uusi ominaisuus ECMAScript 5: ssä. John Resig kirjoitti siitä mukavan yhteenvedon.
Se on vain merkkijono, jonka laitat JavaScript-tiedostoihisi (joko tiedoston yläosaan tai toiminnon sisälle), joka näyttää tältä:
"käytä tiukasti";
Sen lisääminen koodiin nyt ei saisi aiheuttaa ongelmia nykyisten selainten kanssa, koska se on vain merkkijono. Se voi aiheuttaa ongelmia koodissasi tulevaisuudessa, jos koodi rikkoo käytäntöä. Esimerkiksi, jos sinulla on tällä hetkellä foo = "bar" määrittelemättä ensin foo, koodisi alkaa epäonnistua ... mikä on mielestäni hyvä asia.
|
Lausunto "käytä tiukkaa"; kehottaa selainta käyttämään Strict-tilaa, joka on pienempi ja turvallisempi JavaScript-ominaisuusjoukko.
Luettelo ominaisuuksista (ei tyhjentävä)
Estää globaalit muuttujat. (Sieppaa puuttuvat var-ilmoitukset ja kirjoitusvirheet muuttujien nimissä)
Hiljaiset epäonnistuneet tehtävät heittävät virheen tiukassa tilassa (osoitetaan NaN = 5;)
Yritykset poistaa palautamattomat ominaisuudet heittävät (poista Object.prototype)
Edellyttää, että kaikki objekti literaalin ominaisuusnimet ovat yksilöllisiä (var x = {x1: "1", x1: "2"})
Toimintoparametrien nimien on oltava yksilöllisiä (funktion summa (x, x) {...})
Kieltää oktaalisyntaksin (var x = 023; jotkut kehittäjät olettavat väärin, että edeltävä nolla ei muuta numeron muuttamista.)
Kieltää avainsanalla
tiukassa tilassa eval ei tuo uusia muuttujia
Kieltää tavallisten nimien poistamisen (poista x;)
Kieltää nimien eval ja argumenttien sitomisen tai osoittamisen missä tahansa muodossa
Tiukka tila ei peitä argumenttiobjektin aliaksen ominaisuuksia muodollisten parametrien kanssa. (eli funktion summana (a, b) {return argumentit [0] + b;} Tämä toimii, koska argumentit [0] on sidottu a: han ja niin edelleen.)
argumentteja.callee ei tueta
[Viite: Tiukka tila, Mozilla Developer Network]
|
Jos ihmiset ovat huolissaan tiukasta käytöstä, saattaa olla syytä tarkistaa tämä artikkeli:
ECMAScript 5 'Strict mode' -tuki selaimissa. Mitä tämä tarkoittaa? NovoGeek.com - Krishnan weblog
Siinä puhutaan selaintuesta, mutta mikä tärkeintä, kuinka käsitellä sitä turvallisesti:
function isStrictMode () {
palaa! tämä;
}
/ *
palauttaa arvon false, koska 'tämä' viittaa globaaliin objektiin ja
'! tästä' tulee väärä
* /
function isStrictMode () {
"käytä tiukasti";
palaa! tämä;
}
/ *
palauttaa arvon tosi, koska tiukassa tilassa avainsana "tämä"
ei viittaa globaaliin objektiin, toisin kuin perinteinen JS.
Joten tässä 'tämä' on 'määrittelemätön' ja '! Tämä' tulee totta.
* /
|
Varoituksen sana, kaikki kovasti lataavat ohjelmoijat: "use range" -asetuksen käyttäminen olemassa olevaan koodiin voi olla vaarallista! Tämä asia ei ole hyvä olo, iloiset kasvot -tarra, jonka voit iskeä koodiin, jotta se olisi 'parempi'. "Käytä tiukkaa" -käytäntöä käytettäessä selain heittää yhtäkkiä poikkeuksia satunnaisiin paikkoihin, joita se ei koskaan ennen heittänyt, vain siksi, että teet jotain, jonka oletusarvoinen / löysä JavaScript sallii mielellään, mutta tiukka JavaScript-kauhistus! Harvoin käytetyissä puheluissa koodissasi saattaa olla tiukkuussääntöjen rikkomuksia, jotka aiheuttavat poikkeuksen vain silloin, kun ne lopulta suoritetaan - esimerkiksi maksavan asiakkaasi käyttämässä tuotanto-ympäristössä!
Jos aiot syöksyä, on hyvä käyttää "käytä tiukkaa" -valintaa kattavien yksikötestien ja tiukasti määritetyn JSHint-rakennustehtävän ohella, mikä antaa sinulle varmuutta siitä, että moduulissasi ei ole pimeää kulmaa, joka räjäyttää kamalasti vain siksi, että olet ottanut käyttöön tiukan tilan. Tai hei, tässä on toinen vaihtoehto: älä vain lisää "use range" mihinkään vanhaan koodiin, se on todennäköisesti turvallisempaa, rehellisesti. ÄLÄ KOSKAAN lisää "käytä tiukkaa" moduuleihin, joita et omista tai jotka eivät ole omistuksessaylläpitää, kuten kolmansien osapuolten moduuleja.
Uskon, että vaikka se onkin tappava häkkieläin, "tiukka käyttö" voi olla hyvää kamaa, mutta se on tehtävä oikein. Paras aika toimia tiukasti on, kun projektisi on vihreä kenttä ja aloitat alusta. Määritä JSHint / JSLint kaikilla varoituksilla ja vaihtoehdoilla niin tiukasti kuin tiimisi voi vatsaan, hanki hyvä rakennus- / testi- / vakuutusjärjestelmä, joka on väärennetty kuten Grunt + Karma + Chai, ja vasta sitten alat merkitä kaikki uudet moduulisi nimellä " käytä tiukkaa ". Ole valmis parantamaan paljon kiusallisia virheitä ja varoituksia. Varmista, että kaikki ymmärtävät vakavuuden määrittämällä koontiversioksi FAIL, jos JSHint / JSLint aiheuttaa rikkomuksia.
Projektini ei ollut vihreän kentän projekti, kun hyväksyin "käytä tiukkaa". Tämän seurauksena IDE-tunnukseni on täynnä punaisia ​​merkkejä, koska minulla ei ole "käytä tiukkaa" puolessa moduuleistani, ja JSHint valittaa siitä. Se on minulle muistutus siitä, mitä refaktorointia minun pitäisi tehdä tulevaisuudessa. Tavoitteenani on olla punainen merkki vapaana kaikkien puuttuvien "käytä tiukkojen" lausumieni takia, mutta se on vuosien päässä.
|
Käyttämällä 'käytä tiukkaa'; ei yhtäkkiä tee koodistasi parempaa.
JavaScript-tiukka tila on ominaisuus ECMAScript 5: ssä. Voit ottaa tiukan tilan käyttöön ilmoittamalla tämän komentosarjan / toiminnon yläosassa.
'käytä tiukasti';
Kun JavaScript-moottori näkee tämän direktiivin, se alkaa tulkita koodia erityistilassa. Tässä tilassa virheitä heitetään, kun havaitaan tiettyjä koodauskäytäntöjä, jotka saattavat olla mahdollisia vikoja (mikä on tiukan tilan takana).
Harkitse tätä esimerkkiä:
var a = 365;
var b = 030;
Pakkomielteessään järjestää numeeriset literaalit kehittäjä on vahingossa alustanut muuttujan b oktaalilitraalilla. Ei-tiukka tila tulkitsee tämän numeerisena literaalina, jonka arvo on 24 (perustassa 10). Tiukka tila aiheuttaa kuitenkin virheen.
Tässä vastauksessa on tyhjentävä luettelo tiukassa tilassa olevista erikoisuuksista.
Missä minun pitäisi käyttää "käytä tiukkaa" ;?
Uudessa JavaScript-sovelluksessani: Ehdottomasti! Tiukkaa tilaa voidaan käyttää ilmiantajana, kun teet jotain tyhmää koodisi kanssa.
Nykyisessä JavaScript-koodissani: Luultavasti ei! Jos nykyisessä JavaScript-koodissasi on lauseita, jotka ovat kiellettyjä tiukassa tilassa, sovellus yksinkertaisesti rikkoutuu. Jos haluat tiukan tilan, sinun on oltava valmis virheenkorjaukseen ja korjaamaan nykyinen koodi. Siksi 'käytä tiukkaa' -toiminnon käyttö; ei yhtäkkiä tee koodistasi parempaa.
Kuinka käytän tiukkaa tilaa?
Lisää 'use range'; lause komentosarjan päällä:
// Tiedosto: myscript.js
'käytä tiukasti';
var a = 2;
....
Huomaa, että kaikki tiedostossa myscript.js tulkitaan tiukassa tilassa.
Tai lisää "käytä tiukasti"; lauseke toiminnon rungon päällä:
toiminto doSomething () {
'käytä tiukasti';
...
}
Kaikki doSomethingin leksikaalinen toiminta-alue tulkitaan tiukassa tilassa. Sana leksikaalinen soveltamisala on tärkeä tässä. Esimerkiksi, jos tiukka koodisi kutsuu kirjaston toimintoa, joka ei ole tiukka, vain koodisi suoritetaan tiukassa tilassa, ei kutsuttua toimintoa. Katso tästä vastauksesta parempi selitys.
Mitkä asiat ovat kiellettyjä tiukassa tilassa?
Löysin mukavan artikkelin, jossa kuvataan useita asioita, jotka on kielletty tiukassa tilassa (huomaa, että tämä ei ole yksinomainen luettelo):
Soveltamisala
Historiallisesti JavaScriptiä on sekoitettu siitä, miten se toimii
valitaan. Joskus ne näyttävät olevan staattisesti rajattuja, mutta jotkut
ominaisuudet saavat heidät käyttäytymään kuin dynaamisesti. Tämä on
sekava, mikä tekee ohjelmista vaikeasti luettavia ja ymmärrettäviä.
Väärinkäsitys aiheuttaa virheitä. Se on myös ongelma suorituskyvyssä.
Staattinen ulottuvuus mahdollistaisi muuttuvan sitoutumisen tapahtuvan kääntämisen yhteydessä
aikaa, mutta vaatimus dynaamisesta laajuudesta tarkoittaa, että sitomisen on oltava
lykättiin ajonaikaan, mikä tuottaa merkittävän suorituskyvyn
rangaistus.
Tiukka tila edellyttää, että kaikki muuttujien sidonnat tehdään staattisesti.
Tämä tarkoittaa, että ominaisuudet, jotka aiemmin vaativat dynaamista sitomista
on poistettava tai muutettava. Erityisesti with-lause on
eliminoidaan ja eval-toiminnon kyky manipuloida
soittajan ympäristö on tiukasti rajoitettu.
Yksi tiukan koodin eduista on, että työkalut, kuten YUI Compressor
voi tehdä parempaa työtä sitä käsiteltäessä.
Implisiittiset globaalit muuttujat
JavaScript on sisältänyt globaalit muuttujat. Jos
et ilmoita muuttujaa nimenomaisesti, globaali muuttuja on
ilmoitettu sinulle epäsuorasti. Tämä helpottaa ohjelmointia
aloittelijoille, koska he voivat laiminlyödä joitain perussijoitustaan
askareita. Mutta se tekee suurempien ohjelmien hallinnasta paljon enemmän
vaikeaa ja se heikentää merkittävästi luotettavuutta. Joten tiukasti
implisiittisiä globaaleja muuttujia ei enää luoda. Sinun pitäisi
ilmoita kaikki muuttujat nimenomaisesti.
Globaali vuoto
Tämän voi aiheuttaa useita tilanteita
sitoutua globaaliin kohteeseen. Esimerkiksi, jos unohdat
anna uusi etuliite, kun soitat rakentajalletoiminto,
rakentaja sitoutuu yllättäen globaaliin kohteeseen, joten
uuden objektin alustamisen sijaan se on hiljaa
muuttujien muuttaminen. Näissä tilanteissa tiukka tila tulee
sen sijaan sitoa tämä määrittelemättömään, mikä saa konstruktorin toimimaan
heittää sen sijaan poikkeus, jolloin virhe voidaan havaita paljon
ennemmin.
Meluisa epäonnistuminen
JavaScriptillä on aina ollut vain luku -ominaisuudet, mutta sinä
ei voinut luoda niitä itse, ennen kuin ES5: n Object.createProperty
toiminto paljasti kyseisen kyvyn. Jos yritit määrittää arvon
vain luku -ominaisuuteen, se epäonnistuu äänettömästi. Tehtävä olisi
ei muuta kiinteistön arvoa, mutta ohjelmasi etenee
vaikka sillä oli. Tämä on eheysvaara, joka voi aiheuttaa ohjelmille
mennä epäjohdonmukaiseen tilaan. Tiukassa tilassa yritetään muuttaa a
vain luku -ominaisuus aiheuttaa poikkeuksen.
Octal
Lukujen oktaalinen (tai perusta 8) edustus oli erittäin suuri
hyödyllinen, kun tehdään konetason ohjelmointia koneilla, joiden sana
koot olivat kerrannaiset 3. Tarvitsit oktaalia työskennellessäsi CDC: n kanssa
6600 keskusyksikköä, jonka sanakoko oli 60 bittiä. Jos osaisit lukea
oktaali, voit katsoa sanaa 20 numerona. Kaksi numeroa edustettuina
op-koodi, ja yksi numero tunnisti yhden kahdeksasta rekisteristä. Aikana
hidas siirtyminen konekoodeista korkean tason kieliin oli
ajatellaan olevan hyödyllistä tarjota oktaalimuotoja ohjelmointikielillä.
C: ssä oktaalisuuden edustus oli erittäin valitettava
valittu: Johtava nolla. Joten C: ssä 0100 tarkoittaa 64, ei 100, ja 08 on
virhe, ei 8. Vielä enemmän valitettavasti tämä anakronismi on ollut
kopioitu lähes kaikille moderneille kielille, mukaan lukien JavaScript, missä
sitä käytetään vain virheiden luomiseen. Sillä ei ole muuta tarkoitusta. Joten sisään
tiukassa tilassa oktaalimuotoja ei enää sallita.
Jne
Argumentit pseudo-taulukosta tulevat hieman enemmän
taulukon kaltainen ES5: ssä. Tiukassa tilassa se menettää soittajansa ja soittajansa
ominaisuudet. Tämä antaa mahdollisuuden välittää argumenttisi epäluotettaviksi
koodia luopumatta paljon luottamuksellisesta asiayhteydestä. Myös
argumentit funktioiden ominaisuus eliminoidaan.
Tiukassa tilassa kaksoisnäppäimet funktiolitraalissa tuottavat a
syntaksivirhe. Funktiolla ei voi olla kahta parametria samalla nimellä.
Funktiolla ei voi olla muuttujaa, jolla on sama nimi kuin sillä
parametrit. Toiminto ei voi poistaa omia muuttujiaan. Yritys
ei-määritettävän ominaisuuden poistaminen aiheuttaa nyt poikkeuksen. Primitiivinen
arvoja ei ole implisiittisesti kääritty.
Varatut sanat tuleville JavaScript-versioille
ECMAScript 5 lisää luettelon varattuista sanoista. Jos käytät niitä muuttujina tai argumentteina, tiukka tila heittää virheen. Varatut sanat ovat:
toteuttaa, käyttöliittymä, anna, pakkaa, yksityinen, suojattu, julkinen, staattinen ja tuotto
Lisälukemista
Tiukka tila - JavaScript | MDN
Selaimen tuki tiukalle tilalle
Siirtyminen tiukkaan tilaan
|
Suosittelen voimakkaasti jokaista kehittäjää aloittamaan tiukka tila nyt. On tarpeeksi selaimia, jotka tukevat sitä, että tiukka tila auttaa laillisesti säästämään virheiltä, ​​joita emme edes tienneet koodissasi.
Ilmeisesti alkuvaiheessa on virheitä, joita emme ole koskaan ennen kokeneet. Täyden hyödyn saamiseksi meidän on tehtävä asianmukainen testaus tiukkaan tilaan siirtymisen jälkeen varmistaaksemme, että olemme saaneet kaiken kiinni. Ehdottomasti emme vain heitä koodissamme tiukkaa käyttöä ja oletamme, ettei siinä ole virheitä. Joten suhde on, että on aika alkaa käyttää tätä uskomattoman hyödyllistä kieliominaisuutta paremman koodin kirjoittamiseen.
Esimerkiksi,
var henkilö = {
nimi: 'xyz',
sijainti: 'abc',
fullname: function () {"käytä tiukkaa"; palauta tämä.nimi; }
};
JSLint on Douglas Crockfordin kirjoittama virheenkorjausohjelma. Liitä vain komentosarjasi, niin se etsii nopeasti havaittavia ongelmia ja virheitä koodissasi.
|
Haluaisin tarjota hieman perustellumman vastauksen täydentämään muita vastauksia. Toivoin muokata suosituinta vastausta, mutta epäonnistuin. Yritin tehdä siitä mahdollisimman kattavan ja täydellisen.
Lisätietoja on MDN-ohjeissa.
"käytä tiukasti" ECMAScript 5: ssä esitettyä direktiiviä.
Direktiivit ovat samanlaisia ​​kuin lausunnot, mutta erilaiset.
use range ei sisällä avainsanoja: Direktiivi on yksinkertainen lauseke, joka koostuu erityisestä merkkijonolitraalista (yksittäisissä tai kaksoislainauksissa). JavaScript-moottorit, jotka eivät käytä ECMAScript 5: ää, vain näkevät lausekkeen ilman sivuvaikutuksia. On odotettavissa, että ECMAScript-standardien tulevissa versioissa otetaan käyttöön todellinen avainsana; lainaukset täten vanhentuvat.
use range -toimintoa voidaan käyttää vain komentosarjan tai funktion alussa, ts. sen on edeltävä kaikkia muita (todellisia) lauseita. Sen ei tarvitse olla funktion komentosarjan ensimmäinen käsky: sitä voivat edeltää muut lause lausekkeet (ja JavaScript)täytäntöönpanot voivat kohdella niitä täytäntöönpanokohtaisina direktiiveinä). Merkkijonon literaalilausekkeet, jotka seuraavat ensimmäistä todellista lausetta (komentosarjassa tai toiminnossa), ovat yksinkertaisia ​​lausekkeita. Tulkit eivät saa tulkita niitä direktiiveinä, eikä niillä ole vaikutusta.
Käyttötiheysdirektiivi osoittaa, että seuraava koodi (komentosarjassa tai toiminnossa) on tiukka koodi.
Komentosarjan korkeimmalla tasolla olevaa koodia (koodi, joka ei ole funktiossa) pidetään tiukkana koodina, kun komentosarja sisältää tiukan käyttödirektiivin.
Funktion sisältöä pidetään tiukkana koodina, kun toiminto itsessään on määritelty tiukassa koodissa tai kun toiminto sisältää käyttötiheellisen direktiivin.
Koodia, joka välitetään eval () -menetelmälle, pidetään tiukkana koodina, kun eval () kutsuttiin tiukasta koodista tai se sisältää itse käyttödirektiivin.
ECMAScript 5: n tiukka tila on rajoitettu Java-kielen osajoukko, joka eliminoi kielen asiaankuuluvat puutteet ja sisältää tiukemman virhetarkistuksen ja paremman turvallisuuden. Seuraavassa luetellaan erot tiukan ja normaalin tilan välillä (joista kolme ensimmäistä ovat erityisen tärkeitä):
Et voi käyttää with-lauseketta tiukassa tilassa.
Tiukassa tilassa kaikki muuttujat on ilmoitettava: jos määrität arvon tunnisteelle, jota ei ole ilmoitettu muuttujaksi, funktioksi, funktioparametriksi, saalislausekeparametriksi tai globaalin objektin ominaisuudeksi, saat ReferenceErrorin. Normaalitilassa tunniste ilmoitetaan implisiittisesti globaalina muuttujana (globaalin objektin ominaisuutena)
Tiukassa tilassa avainsanalla tällä on arvo, jota ei ole määritelty funktioissa, joita kutsuttiin funktioiksi (ei menetelmiksi). (Normaalitilassa tämä osoittaa aina globaalin objektin). Tätä eroa voidaan käyttää testaamaan, tukeeko toteutus tiukkaa tilaa:
var hasStrictMode = (function () {"käytä tiukkaa"; palauta tämä === undefined} ());
Myös silloin, kun toiminto kutsutaan puhelun () kanssa tai sitä käytetään tiukassa tilassa, tämä on täsmälleen puhelun () tai sovelluksen () ensimmäisen kutsun argumentin arvo. (Normaalitilassa nolla ja määrittelemätön korvataan globaalilla Objektilla ja arvot, jotka eivät ole objekteja, heitetään esineiksi.)
Tiukassa tilassa saat TypeError-arvon, kun yrität määrittää vain luku -ominaisuuksia tai määrittää uusia ominaisuuksia laajentamattomalle objektille. (Normaalitilassa molemmat yksinkertaisesti epäonnistuvat ilman virheilmoitusta.)
Tiukassa tilassa, kun välität koodin eval (): lle, et voi ilmoittaa tai määritellä muuttujia tai toimintoja soittajan piiriin (kuten voit tehdä sen normaalitilassa). Sen sijaan eval (): lle luodaan uusi laajuus ja muuttujat ja funktiot ovat sen sisällä. Tämä laajuus tuhoutuu, kun eval () on suorittanut suorituksen.
Tiukassa tilassa funktion argumentti-objekti sisältää staattisen kopion arvoista, jotka välitetään tälle funktiolle. Normaalitilassa argumentit-objekti käyttäytyy jonkin verran "maagisesti": Taulukon elementit ja nimetyt funktioparametrit viittaavat molempiin arvoihin.
Tiukassa tilassa saat SyntaxError-arvon, kun poisto-operaattoria seuraa pätevä tunniste (muuttuja, funktio tai toimintoparametri). Normaalitilassa poistolauseke ei tekisi mitään ja se arvioitiin vääräksi.
Tiukassa tilassa saat TypeError-yhteyden, kun yrität poistaa ei-määritettävää ominaisuutta. (Normaalitilassa yritys yksinkertaisesti epäonnistuu ja poistolauseke arvioidaan vääräksi).
Tiukassa tilassa sitä pidetään syntaktisena virheenä, kun yrität määrittää useita ominaisuuksia samalla nimellä objektilitraalille. (Normaalitilassa ei ole virhettä.)
Tiukassa tilassa sitä pidetään syntaktisena virheenä, kun funktiodeklaraatiossa on useita samannimisiä parametreja. (Normaalitilassa ei ole virhettä.)
Tiukassa tilassa oktaalilitraalit eivät ole sallittuja (nämä ovat literaaleja, jotka alkavat 0x: llä. (Normaalitilassa jotkut toteutukset sallivat oktaalilitraalit).
Tiukassa tilassa tunnisteita eval ja argumentteja käsitellään kuin avainsanoja. Et voi muuttaa niiden arvoa, et voi antaa heille arvoa, etkä voi käyttää niitä muuttujien, toimintojen, toimintoparametrien tai saalislohkon tunnisteiden niminä.
Tiukassa tilassa on enemmän rajoituksia mahdollisuudelle tutkia puhelupinoa. arguments.caller ja argument.callee aiheuttavat TypeError-toiminnon tiukassa tilassa. Lisäksi jotkut funktioiden soittaja- ja argumenttiominaisuudet tiukassa tilassa aiheuttavat TypeError-arvon, kun yrität lukea niitä.
|
Kaksi senttiäni:
Yksi tiukan tilan tavoitteista on mahdollistaa ongelmien nopeampi virheenkorjaus. Se auttaa kehittäjiä heittämällä poikkeuksen, kun esiintyy tiettyjä vääriä asioita, jotka voivat aiheuttaa verkkosivusi hiljaista ja outoa käyttäytymistä. Heti kun käytämme tiukkaa, koodi heittää virheitä, mikä auttaa kehittäjää korjaamaan sen etukäteen.
Muutama tärkeä asia, jonka olen oppinut käytön jälkeen:
Estää globaalin muuttujan ilmoituksen:
var puu1Data= {nimi: 'Banaanipuu', ikä: 100, lehtiä: 100000};
funktiopuu (typeOfTree) {
vaihteleva ikä;
var leafCount;
ikä = typeOfTree.age;
leafCount = typeOfTree.leafCount;
nameoftree = typeOfTree.name;
};
var tree1 = uusi puu (tree1Data);
console.log (ikkuna);
Nyt tämä koodi luo nimettömän maailmanlaajuisen laajuuden, johon pääsee käsiksi window.nameoftree-ohjelmalla. Kun toteutamme käytön tiukka, koodi heittää virheen.
Uncaught ReferenceError: nameoftree ei ole määritelty
Näyte
Poistetaan lauseella:
lausekkeilla ei voida minimoida työkaluilla, kuten uglify-js. Ne on myös vanhentunut ja poistettu tulevista JavaScript-versioista.
Näyte
Estää kaksoiskappaleet:
Kun meillä on päällekkäinen ominaisuus, se aiheuttaa poikkeuksen
Uncaught SyntaxError: Duplicate data property in object literal not
sallittu tiukassa tilassa
"käytä tiukasti";
var tree1Data = {
nimi: 'Banana Tree',
ikä: 100,
lehtiMäärä: 100000,
nimi: 'Banaanipuu'
};
Niitä on muutama, mutta minun on hankittava lisää tietoa siitä.
|
Jos käytät viime vuonna julkaistua selainta, se todennäköisesti tukee JavaScriptin tiukkaa tilaa. Vain vanhemmat selaimet ennen kuin ECMAScript 5: stä tuli nykyinen standardi, eivät tue sitä.
Komennon ympärillä olevat lainaukset varmistavat, että koodi toimii edelleen myös vanhemmissa selaimissa (vaikka syntaksivirhettä tiukassa tilassa aiheuttavat yleensä vain komentosarjan toimintahäiriön joissakin vaikeasti havaittavissa tavoissa näissä vanhemmissa selaimissa)
|
Kun lisäät "use strict"; -asetuksen, seuraavat tapaukset syntetisoivat virheen ennen komentosarjan suorittamista:
Pohjustaa tietä tuleville ECMAScript-versioille käyttämällä yhtä hiljattain varatuista avainsanoista (ennestään ECMAScript 6: lle): työkalut, käyttöliittymä, let, paketti, yksityinen, suojattu, julkinen, staattinen ja tuotto.
Toiminnon ilmoittaminen lohkoina
jos (a : 3: 15)
kohdassa : 6: 5
Tässä kääntäjä heittää referenssivirheen. Tiukassa tilassa kääntäjä ei salli meidän käyttää muuttujaa ilmoittamatta sitä. Joten muistivuodot voidaan estää. Lisäksi voimme kirjoittaa optimoidun koodin.
|
Tiukka tila eliminoi virheet, jotka ohitettaisiin ei-tiukassa tilassa, mikä tekee javascriptistä "turvallisemman".
Pidetäänkö sitä parhaiden käytäntöjen joukossa?
Kyllä, sitä pidetään osana parhaita käytäntöjä työskenneltäessä javascriptin kanssa tiukan tilan sisällyttämiseksi. Tämä tehdään lisäämällä alla oleva koodirivi JS-tiedostoon.
'käytä tiukasti';
koodissasi.
Mitä se tarkoittaa käyttäjäagenteille?
Koodin tulkitseminen tiukassa tilassa osoittaa käyttäjän agenteille, kuten selaimille, että heidän tulisi käsitellä koodia kirjaimellisesti kirjoitettuna ja heittää virhe, jos koodilla ei ole mitään järkeä.
Esimerkiksi: Harkitse .js-tiedostossasi seuraavaa koodia:
Skenaario 1: [EI VAHVAA TILA]
var city = "Chicago"
console.log (kaupunki) // Tulostaa kaupungin nimen, ts. Chicago
Skenaario 2: [EI VAHVAA TILA]
kaupunki = "Chicago"
console.log (kaupunki) // Tulostaa kaupungin nimen, ts. Chicago
Joten miksi muuttujan nimi tulostetaan molemmissa tapauksissa?
Ilman tiukkaa tilaa, käyttäjäagentit käyvät usein läpi useita muutoksia ongelmallisiin koodeihin yrittäen saada sen järkeväksi. Pinnalla tämä voi tuntua hienolta, ja todellakin, tiukan tilan ulkopuolella työskenteleminen antaa ihmisille mahdollisuuden kastaa jalkansa JavaScript-koodilla ilman, että kaikki yksityiskohdat ovat naulattuja. Kehittäjänä en kuitenkaan halua jättää virhettä koodiini, koska tiedän, että se voi tulla takaisin ja purra minua myöhemmin, ja haluan myös kirjoittaa vain hyvän koodin. Ja siellä tiukka tila auttaa.
Skenaario 3: [STRICT MODE]
'käytä tiukasti';
kaupunki = "Chicago"
console.log (kaupunki) // Viitevirhe: määritys on ilmoittamaton muuttujakaupunki.
Lisävinkki: Koodin laadun ylläpitämiseksi tiukassa tilassa sinun ei tarvitse kirjoittaa tätä uudestaan, varsinkin jos sinulla on useita .js-tiedostoja. Voit ottaa tämän säännön käyttöön maailmanlaajuisesti eslint-säännöissä seuraavasti:
Tiedostonimi: .eslintrc.js
module.exports = {
env: {
es6: totta
},
säännöt: {
tiukka: ['virhe', 'yleinen'],
},
};
Okei, mitä estetään tiukassa tilassa?
Muuttujan käyttäminen ilmoittamatta sitä heittää virheen tiukassa tilassa. Näin estetään tahattomien globaalien muuttujien luominen koko sovelluksellesi. Chicagon tulostusesimerkki kattaa tämän erityisesti.
Muuttujan, funktion tai argumentin poistaminen on ei-ei tiukassa tilassa.
"käytä tiukasti";
funktio x (p1, p2) {};
poista x; // Tämä aiheuttaa virheen
Parametrin nimen kopioiminen ei ole sallittua tiukassa tilassa.
"käytä tiukasti";
funktio x (p1, p1) {}; // Tämä aiheuttaa virheen
Javascript-kielellä varattuja sanoja ei sallita tiukassa tilassa. Sanat ovat toteutusliittymä, let, paketit, yksityinen, suojattu, julkinen. staattinen ja tuotto
Kattavamman luettelon saat MDN-ohjeista täältä: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
|
Erittäin aktiivinen kysymys. Ansaitse 10 mainetta vastaamiseksi tähän kysymykseen. Maineen vaatimus auttaa suojaamaan tätä kysymystä roskapostilta ja vastaamattomuudelta.
Eikö vastausta etsit? Selaa muita kysymyksiä, jotka on merkitty koodilla javascript syntaksi jslint use-strict tai kysy oma kysymyksesi.